package com.heima.it.allTest;

import java.util.ArrayList;
import java.util.Scanner;

public class studentSystem {
/**
 * 综合训练：学生管理系统，注册、登录、忘记密码、增、删、改、查
 *
 * 优化：使用 final 关键字定义常量，让代码变得更加语义化。 switch 中 case 后面的数字，可以优化下。
 *
 * **/
    private static final String ADD_STUDENT_INFO = "1";
    private static final String DELET_STUDENT_INFO = "2";
    private static final String CHANGE_STUDENT_INFO = "3";
    private static final String QUERY_STUDENT_INFO = "4";
    private static final String EXIT = "5";

    public static void main(String[] args) {



//        用一个集合来存储学生对象
        ArrayList<students> stuArr = new ArrayList<>();
//        键盘录入对应的序号，执行对应的逻辑操作
        Scanner sc = new Scanner(System.in);
        while (true) {
            //        展示序号对应的功能列表
            System.out.println("-----------------------请录入要操纵的序号，学生管理系统------------------------------");
            System.out.println("1-增加学生信息");
            System.out.println("2-删除学生信息");
            System.out.println("3-修改学生信息");
            System.out.println("4-查询学生信息");
            System.out.println("5-退出");
            System.out.println("-----------------------请录入要操纵的序号，学生管理系统------------------------------");
            String num = sc.next();
            switch (num) {
                case ADD_STUDENT_INFO:
                    add(stuArr);
                    break;
                case DELET_STUDENT_INFO:
                    delete(stuArr);
                    break;
                case CHANGE_STUDENT_INFO:
                    change(stuArr);
                    break;
                case QUERY_STUDENT_INFO:
                    query(stuArr);
                    break;
                case EXIT:
                    System.out.println("退出成功！");
                    System.exit(0);  // 退出所有循环
                default:
                    System.out.println("录入的序号有误！请重新录入！！！");
                    break;
            }
        }
    }

    //    增加
    public static void add(ArrayList<students> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入学生id号:");
        String ids = sc.next();
        int indexNum = returnStudents(list, ids); // 根据 id 值校验是否已经存在当前学生
        if (indexNum != -1) {
            System.out.println("已经存在该学生！请重新添加！！！");
            return;
        }
        System.out.println("输入学生姓名：");
        String name = sc.next();
        System.out.println("输入学生年龄：");
        String age = sc.next();
        System.out.println("输入学生地址：");
        String addres = sc.next();
        students stud = new students();
        stud.setId(ids);
        stud.setNames(name);
        stud.setAge(age);
        stud.setAddres(addres);
        list.add(stud);
        System.out.println("添加学生信息成功！！");
        showAllStudents(list);
    }

    //    删除
    public static void delete(ArrayList<students> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入学生id号:");
        String ids = sc.next();
        int indexNum = returnStudents(list, ids); // 根据 id 值校验是否已经存在当前学生
        if (indexNum == -1) {
            System.out.println("不存在该学生！请重新输入！！！");
            return;
        }
        list.remove(indexNum);
        showAllStudents(list);
    }

    //    修改
    public static void change(ArrayList<students> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入要修改的学生id号:");
        String ids = sc.next();
        int indexNum = returnStudents(list, ids); // 根据 id 值校验是否已经存在当前学生
        if (indexNum == -1) {
            System.out.println("不存在该学生！请重新输入！！！");
            return;
        }
        students stud = list.get(indexNum);
        System.out.println("输入学生姓名：");
        String name = sc.next();
        System.out.println("输入学生年龄：");
        String age = sc.next();
        System.out.println("输入学生地址：");
        String addres = sc.next();
        stud.setId(ids);
        stud.setNames(name);
        stud.setAge(age);
        stud.setAddres(addres);
        System.out.println("修改学生信息成功！！");
        showAllStudents(list);
    }

    //    查询
    public static void query(ArrayList<students> list) {
        // 键盘录入对应的id号码，执行对应的逻辑操作
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入查询的学生id号码：");
        String idNum;
        idNum = sc.next();
        int indexNum = returnStudents(list, idNum);
        if (indexNum == -1) {
            System.out.println("未查询到对应id的学生，请重新输入id值！！！！");
        } else {
            System.out.println("姓名：" + list.get(indexNum).getNames() + "\t年龄：" + list.get(indexNum).getAge() + "\t住址：" + list.get(indexNum).getAddres());
        }
    }

    //    根据id 在集合中查出学生对象并返回索引号
    public static int returnStudents(ArrayList<students> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(id)) {
                return i;
            }
        }
        return -1;
    }

    //    展示集合中所有的学生对象
    public static void showAllStudents(ArrayList<students> list) {
        System.out.println("此时还剩" + list.size() + "个学生");
        System.out.println("姓名\t\t"+"年龄\t"+"住址\t"+"学号");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).getNames() + "\t\t" + list.get(i).getAge() + "\t\t" + list.get(i).getAddres() + "\t\t" + list.get(i).getId());
        }
    }
}
